<?php

Yii::import('application.modules.actividades.models._base.BaseActividad');

class Actividad extends BaseActividad {

    const TIPO_CREATE = 'CREATE';
    const TIPO_UPDATE = 'UPDATE';
    const TIPO_DELETE = 'DELETE';
    const TIPO_RESTORE = 'RESTORE';

    /**
     * @return Actividad
     */
    public static function model($className = __CLASS__) {
        return parent::model($className);
    }

    public static function label($n = 1) {
        return Yii::t('app', 'Actividad|Actividades', $n);
    }

    public function scopes() {
        return array(
            'ordenFecha' => array(
                'order' => 't.fecha DESC',
            ),
        );
    }

    /**
     * @author Mauricio Chamorro <mchamorro@tradesystem.com.ec>
     * Método estático que permite registrar una actividad
     * @param type $model modelo en donde se realiza la actividad
     * @param type $tipo tipo de actividad (update,create,delete)
     * @param type $usuario_id usuario que realiza la actividad, opcional
     * @param type $detalle mensaje extra sobre el detalle de la actividad, opcional
     * @return type Boolean devuelve un true o false si guarda o no la actividad
     */
    public static function registrarActividad($model, $tipo, $usuario_id = null, $detalle = null) {

        $actividad = new Actividad;

        $actividad->attributes = array(
            'entidad_tipo' => $model->tableName(),
            'entidad_id' => $model->id,
            'tipo' => $tipo,
            'usuario_id' => ($usuario_id ? $usuario_id : $model->usuario_creacion_id),
            'fecha' => Util::FechaActual(),
        );
        $actividad->detalle = $detalle ? $detalle : null;
        return $actividad->save();
    }

    /**
     * Devuelve un mensaje formateado segun el tipo de actividad
     * @param Actividad $actividad objeto de tipo Actividad que se quiere formatear
     * @return string mensaje formateado
     */
    public static function getMensaje($actividad) {
        // El mensaje
        $mensaje = "";
        // Primero buscamos el usuario que realizó la accion
        $usuario = Yii::app()->user->um->loadUserById($actividad['usuario_id']);

        if ($usuario) {
            switch ($actividad['entidad_tipo']) {
                // Si es una actividad sobre una cuenta
                case Cuenta::model()->tableName():
                    $cuenta = Cuenta::model()->findByPk($actividad['entidad_id']);
                    $icon = 'briefcase';

                    if ($actividad['tipo'] == self::TIPO_CREATE)
                        $mensaje = $usuario->username . " creó la cuenta " . CHtml::link($cuenta->nombre, array('/crm/cuenta/view', 'id' => $cuenta->id), array('class' => 'btn btn-small btn-inverse'));
                    elseif ($actividad['tipo'] == self::TIPO_UPDATE)
                        if ($actividad['detalle'] != null) {
                            $mensaje = $usuario->username . " " . $actividad['detalle'] . " en la cuenta " . CHtml::link($cuenta->nombre, array('/crm/cuenta/view', 'id' => $cuenta->id), array('class' => 'btn btn-small btn-inverse'));
                        } else {
                            $mensaje = $usuario->username . " actualizó los datos de la cuenta " . CHtml::link($cuenta->nombre, array('/crm/cuenta/view', 'id' => $cuenta->id), array('class' => 'btn btn-small btn-inverse'));
                        } elseif ($actividad['tipo'] == self::TIPO_DELETE)
                        $mensaje = $usuario->username . " eliminó la cuenta \"" . Util::Truncate($cuenta->nombre, 15) . "\"";
                    break;
                // Si es una actividad sobre un contacto
                case Contacto::model()->tableName():
                    $contacto = Contacto::model()->findByPk($actividad['entidad_id']);
                    $icon = 'group';

                    if ($actividad['tipo'] == self::TIPO_CREATE)
                        $mensaje = $usuario->username . " creó el contacto " . CHtml::link($contacto->nombre_completo, array('/crm/contacto/view', 'id' => $contacto->id), array('class' => 'btn btn-small btn-inverse'));
                    elseif ($actividad['tipo'] == self::TIPO_UPDATE)
                        if ($actividad['detalle'] != null) {
                            $mensaje = $usuario->username . " " . $actividad['detalle'] . " del contacto " . CHtml::link($contacto->nombre_completo, array('/crm/contacto/view', 'id' => $contacto->id), array('class' => 'btn btn-small btn-inverse'));
                        } else {
                            $mensaje = $usuario->username . " actualizó los datos del contacto " . CHtml::link($contacto->nombre_completo, array('/crm/contacto/view', 'id' => $contacto->id), array('class' => 'btn btn-small btn-inverse'));
                        } elseif ($actividad['tipo'] == self::TIPO_DELETE)
                        $mensaje = $usuario->username . " eliminó el contacto \"" . Util::Truncate($contacto->nombre_completo, 15) . "\"";
                    break;
                // Si es una actividad sobre una oportunidad
                case Oportunidad::model()->tableName():
                    $oportunidad = Oportunidad::model()->findByPk($actividad['entidad_id']);
                    $icon = 'tags';

                    if ($actividad['tipo'] == self::TIPO_CREATE)
                        $mensaje = $usuario->username . " creó la oportunidad " . CHtml::link($oportunidad->nombre, array('/oportunidades/oportunidad/view', 'id' => $oportunidad->id), array('class' => 'btn btn-small btn-inverse'));
                    elseif ($actividad['tipo'] == self::TIPO_UPDATE)
                        if ($actividad['detalle'] != null) {
                            $mensaje = $usuario->username . " " . $actividad['detalle'] . " en la oportunidad " . CHtml::link($oportunidad->nombre, array('/oportunidades/oportunidad/view', 'id' => $oportunidad->id), array('class' => 'btn btn-small btn-inverse'));
                        } else {
                            $mensaje = $usuario->username . " actualizó los datos de la oportunidad " . CHtml::link($oportunidad->nombre, array('/oportunidades/oportunidad/view', 'id' => $oportunidad->id), array('class' => 'btn btn-small btn-inverse'));
                        } elseif ($actividad['tipo'] == self::TIPO_DELETE)
                        $mensaje = $usuario->username . " eliminó la oportunidad \"" . Util::Truncate($oportunidad->nombre, 15) . "\"";
                    break;
                // Si es una actividad sobre una tarea
                case Tarea::model()->tableName():
                    $tarea = Tarea::model()->findByPk($actividad['entidad_id']);
                    $icon = 'tasks';

                    if ($actividad['tipo'] == self::TIPO_CREATE)
                        $mensaje = $usuario->username . " creó la tarea " . CHtml::link($tarea->nombre, array('/tareas/tarea/view', 'id' => $tarea->id), array('class' => 'btn btn-small btn-inverse'));
                    elseif ($actividad['tipo'] == self::TIPO_UPDATE) {
                        if ($actividad['detalle'] != null) {
                            $mensaje = $usuario->username . " " . $actividad['detalle'] . " en la tarea " . CHtml::link($tarea->nombre, array('/tareas/tarea/view', 'id' => $tarea->id), array('class' => 'btn btn-small btn-inverse'));
                        } else {
                            $mensaje = $usuario->username . " actualizó los datos de la tarea " . CHtml::link($tarea->nombre, array('/tareas/tarea/view', 'id' => $tarea->id), array('class' => 'btn btn-small btn-inverse'));
                        }

//                        var_dump($actividad);
                    } elseif ($actividad['tipo'] == self::TIPO_DELETE)
                        $mensaje = $usuario->username . " eliminó la tarea \"" . Util::Truncate($tarea->nombre, 15) . "\"";
                    break;
                // Si es una actividad sobre una cobranza
                case Cobranza::model()->tableName():
                    $cobranza = Cobranza::model()->findByPk($actividad['entidad_id']);
                    $icon = 'money';

                    if ($actividad['tipo'] == self::TIPO_CREATE)
                        $mensaje = $usuario->username . " creó la cobranza " . CHtml::link($cobranza->nombre, array('/cobranzas/cobranza/view', 'id' => $cobranza->id), array('class' => 'btn btn-small btn-inverse'));
                    elseif ($actividad['tipo'] == self::TIPO_UPDATE)
                        if ($actividad['detalle'] != null) {
                            $mensaje = $usuario->username . " " . $actividad['detalle'] . "en la cobranza " . CHtml::link($cobranza->nombre, array('/cobranzas/cobranza/view', 'id' => $cobranza->id), array('class' => 'btn btn-small btn-inverse'));
                        } else {
                            $mensaje = $usuario->username . " actualizó los datos de la cobranza " . CHtml::link($cobranza->nombre, array('/cobranzas/cobranza/view', 'id' => $cobranza->id), array('class' => 'btn btn-small btn-inverse'));
                        } elseif ($actividad['tipo'] == self::TIPO_DELETE)
                        $mensaje = $usuario->username . " eliminó la cobranza \"" . Util::Truncate($cobranza->nombre, 15) . "\"";
                    break;
                // Si es una actividad sobre una nota
                case Nota::model()->tableName():
                    $nota = Nota::model()->findByPk($actividad['entidad_id']);
                    $icon = 'edit-sign';
//                    var_dump($actividad);
                    if ($actividad['tipo'] == self::TIPO_CREATE)
                        $mensaje = $usuario->username . " creó la nota \"" . Util::Truncate($nota->contenido, 15) . "\"";
                    elseif ($actividad['tipo'] == self::TIPO_DELETE)
                        $mensaje = $usuario->username . " eliminó la nota \"" . Util::Truncate($nota->contenido, 15) . "\"";
                    break;
                // Si es una actividad sobre un evento
                case Evento::model()->tableName():
                    $evento = Evento::model()->findByPk($actividad['entidad_id']);
                    $icon = 'calendar';

                    if ($actividad['tipo'] == self::TIPO_CREATE)
                        $mensaje = $usuario->username . " creó el evento " . CHtml::link($evento->nombre, array('/eventos/evento/view', 'id' => $evento->id), array('class' => 'btn btn-small btn-inverse'));
                    elseif ($actividad['tipo'] == self::TIPO_UPDATE)
                        if ($actividad['detalle'] != null) {
                            $mensaje = $usuario->username . " " . $actividad['detalle'] . " del evento " . CHtml::link($evento->nombre, array('/eventos/evento/view', 'id' => $evento->id), array('class' => 'btn btn-small btn-inverse'));
                        } else {
                            $mensaje = $usuario->username . " actualizó los datos del evento " . CHtml::link($evento->nombre, array('/eventos/evento/view', 'id' => $evento->id), array('class' => 'btn btn-small btn-inverse'));
                        } elseif ($actividad['tipo'] == self::TIPO_DELETE)
                        $mensaje = $usuario->username . " eliminó el evento \"" . Util::Truncate($evento->nombre, 15) . "\"";
                    break;
                // Si es una actividad sobre un sms
                case Sms::model()->tableName():
                    $sms = Sms::model()->findByPk($actividad['entidad_id']);
                    $contacto = Contacto::model()->findByPk($sms->contacto_id);
                    $icon = 'comments';

                    if ($actividad['tipo'] == self::TIPO_CREATE)
                        $mensaje = $usuario->username . " envió un sms a " . CHtml::link($contacto->nombre_completo, array('/crm/contacto/view', 'id' => $contacto->id), array('class' => 'btn btn-small btn-inverse'));
                    break;
                // Si es una actividad sobre un mail
                case Mail::model()->tableName():
                    $mail = Mail::model()->findByPk($actividad['entidad_id']);
                    if (isset($mail)) {
                        $contacto = Contacto::model()->findByPk($mail->contacto_id);
                        $icon = 'envelope';

                        if ($actividad['tipo'] == self::TIPO_CREATE)
                            $mensaje = $usuario->username . " envió un mail a " . CHtml::link($contacto->nombre_completo, array('/crm/contacto/view', 'id' => $contacto->id), array('class' => 'btn btn-small btn-inverse'));
                    }
                    break;
                // Si es una actividad sobre una llamada
                case Llamada::model()->tableName():
                    $llamada = Llamada::model()->findByPk($actividad['entidad_id']);
                    $contacto = Contacto::model()->findByPk($llamada->contacto_id);
                    $icon = 'phone';

                    if ($actividad['tipo'] == self::TIPO_CREATE)
                        $mensaje = $usuario->username . " registró una llamada a " . CHtml::link($contacto->nombre_completo, array('/crm/contacto/view', 'id' => $contacto->id), array('class' => 'btn btn-small btn-inverse'));
                    break;
                // Si es una actividad sobre un evento
                case Incidencia::model()->tableName():
                    $incidencia = Incidencia::model()->findByPk($actividad['entidad_id']);
                    $icon = 'fire-extinguisher';

                    if ($actividad['tipo'] == self::TIPO_CREATE)
                        $mensaje = $usuario->username . " creó la incidencia " . CHtml::link($incidencia->nombre, array('/incidencias/incidencia/view', 'id' => $incidencia->id), array('class' => 'btn btn-small btn-inverse'));
                    elseif ($actividad['tipo'] == self::TIPO_UPDATE)
                        if ($actividad['detalle'] != null) {
                            $mensaje = $usuario->username . " " . $actividad['detalle'] . " en la incidencia " . CHtml::link($incidencia->nombre, array('/incidencias/incidencia/view', 'id' => $incidencia->id), array('class' => 'btn btn-small btn-inverse'));
                        } else {
                            $mensaje = $usuario->username . " actualizó los datos de la incidencia " . CHtml::link($incidencia->nombre, array('/incidencias/incidencia/view', 'id' => $incidencia->id), array('class' => 'btn btn-small btn-inverse'));
                        } elseif ($actividad['tipo'] == self::TIPO_DELETE)
                        $mensaje = $usuario->username . " eliminó la incidencia \"" . Util::Truncate($incidencia->nombre, 15) . "\"";
                    break;

                // Si no pertenece a una entidad registrada

                /**
                 * @author Miguel Alba <malba@tradesystem.com.ec>
                 * Campañia registrar campanas
                 */
                case Campania::model()->tableName():
                    $campania = Campania::model()->findByPk($actividad['entidad_id']);
                    $icon = 'rocket';

                    if ($actividad['tipo'] == self::TIPO_CREATE) {
                        if ($actividad['detalle'] == null) {//cuando es null es porque al crear una actividad no se asigna ninguna informacion en la activad
                            $mensaje = $usuario->username . " creó la campaña " . CHtml::link($campania->nombre, array('/campanias/campania/view', 'id' => $campania->id), array('class' => 'btn btn-small btn-inverse'));
                        } else {//cuando se agrego  clientes
                            $mensaje = $usuario->username . " agrego " . $actividad['detalle'] . "  a la campaña";
                        }
                    } elseif ($actividad['tipo'] == self::TIPO_UPDATE) {
                        if ($actividad['detalle'] != null) {
                            $mensaje = $usuario->username . " " . $actividad['detalle'] . " en la campaña " . CHtml::link($campania->nombre, array('/campanias/campania/view', 'id' => $campania->id), array('class' => 'btn btn-small btn-inverse'));
                        } else {
                            $mensaje = $usuario->username . " actualizó los datos de la campaña " . CHtml::link($campania->nombre, array('/campanias/campania/view', 'id' => $campania->id), array('class' => 'btn btn-small btn-inverse'));
                        }
                    } elseif ($actividad['tipo'] == self::TIPO_DELETE) {
                        if ($actividad['detalle'] == null) {
                            $mensaje = $usuario->username . " eliminó la campaña \"" . Util::Truncate($campania->nombre, 15) . "\"";
                        } else {//cuando se elimino un usuario o clients
                            $mensaje = $usuario->username . " eliminó " . $actividad['detalle'] . "  la campaña";
                        }
                    }

                    break;


                /**
                 * @author Mauricio Chamorro <mchamorro@tradesystem.com.ec>
                 * Logica para las acciones de usuarios en las campañas
                 */
                case CampaniaClientesOwner::model()->tableName():
                    $campania = CampaniaClientesOwner::model()->findByPk($actividad['entidad_id']);
                    $icon = 'rocket';

                    if ($actividad['tipo'] == self::TIPO_CREATE) {
                        $mensaje = $usuario->username . " asigno un usuario a la campaña " . CHtml::link($campania->campania->nombre, array('/campanias/campania/view', 'id' => $campania->id), array('class' => 'btn btn-small btn-inverse'));
                    }
//                        campanias/campania/
                    elseif ($actividad['tipo'] == self::TIPO_UPDATE) {
                        if ($actividad['detalle'] != null) {
//                            $mensaje = $usuario->username . " " . $actividad['detalle'] . " en la campaña " . CHtml::link($campania->nombre, array('/campanias/campania/view', 'id' => $campania->id), array('class' => 'btn btn-small btn-inverse'));
                        } else {
//                            $mensaje = $usuario->username . " actualizó los datos de la campaña " . CHtml::link($campania->nombre, array('/campanias/campania/view', 'id' => $campania->id), array('class' => 'btn btn-small btn-inverse'));
                        }
                    } elseif ($actividad['tipo'] == self::TIPO_DELETE) {
                        $mensaje = $usuario->username . " eliminó una cuenta \"" . "\"";
                    }
//                        $mensaje =  " eliminó la campaña \"" . Util::Truncate($campania->nombre, 15) . "\"";
                    break;
                case CampaniaTareaProgramada::model()->tableName():
                    $campaniaTp = CampaniaTareaProgramada::model()->findByPk($actividad['entidad_id']);
                    $icon = 'tasks';
                    if ($actividad['tipo'] == self::TIPO_CREATE) {
                        $mensaje = $usuario->username . " creó la tarea programada " . CHtml::link($campaniaTp->nombre, array(), array('class' => 'btn btn-small btn-inverse'));
                    }
//                        campanias/campania/
                    elseif ($actividad['tipo'] == self::TIPO_UPDATE) {
                        if ($actividad['detalle'] != null) {
                            $mensaje = $usuario->username . " creó la tarea programada " . CHtml::link($campaniaTp->nombre, array(), array('class' => 'btn btn-small btn-inverse'));
                        } else {
                            $mensaje = $usuario->username . " actualizó la tarea programada " . CHtml::link($campaniaTp->nombre, array(), array('class' => 'btn btn-small btn-inverse'));
                        }
                    } elseif ($actividad['tipo'] == self::TIPO_DELETE) {
                        $mensaje = $usuario->username . " eliminó una cuenta \"" . "\"";
                    }
//                        $mensaje =  " eliminó la campaña \"" . Util::Truncate($campania->nombre, 15) . "\"";
                    break;
                default:
                    break;
            }

            if ($mensaje) {
                return "<div class='metro_tmtime' datetime='2013-04-10 18:30'>
                            <span class='date'>" . Util::FormatDate($actividad['fecha'], 'd/m/Y') . "</span>
                            <span class='time'>" . Util::FormatDate($actividad['fecha'], 'H:i') . "</span>
                        </div>
                        <div class='metro_tmicon'><i class='icon-$icon'></i></div>
                        <div class='metro_tmlabel'>$mensaje</div>";
            }
        }
    }

    /**
     * @author Alex Yepez <ayepez@tradesystem.com.ec>
     * retorna el criteria de actividades 
     * @param type $entidad_tipo
     * @param type $entidad_id
     * @return \CDbCriteria
     */
    public function getCriteriaDP($entidad_tipo, $entidad_id) {
        $arrayParams = array(':entidad_tipo' => $entidad_tipo, ':entidad_id' => $entidad_id);
        $criteria = new CDbCriteria();
        $criteria->alias = 'ac';
        //actividades de la entidad
        $criteria->condition = '(ac.entidad_tipo = :entidad_tipo and ac.entidad_id = :entidad_id)';
        //actividades de notas
        $criteria->condition.= ' OR (ac.entidad_tipo = :entidad_nota and ac.entidad_id in(select nota.id from nota where nota.entidad_tipo = :entidad_tipo and nota.entidad_id = :entidad_id))';
        $arrayParams = array_merge($arrayParams, array(':entidad_nota' => Actividades_Constants::ENTIDAD_TIPO_NOTA));
        //activides de tareas
        $criteria->condition.= ' OR (ac.entidad_tipo = :entidad_tarea and ac.entidad_id in(select tarea.id from tarea where tarea.entidad_tipo = :entidad_tipo and tarea.entidad_id = :entidad_id))';
        $arrayParams = array_merge($arrayParams, array(':entidad_tarea' => Actividades_Constants::ENTIDAD_TIPO_TAREA));
        //actividades de eventos
        $criteria->condition.= ' OR (ac.entidad_tipo = :entidad_evento and ac.entidad_id in(select evento.id from evento where evento.entidad_tipo = :entidad_tipo and evento.entidad_id = :entidad_id))';
        $arrayParams = array_merge($arrayParams, array(':entidad_evento' => Actividades_Constants::ENTIDAD_TIPO_EVENTO));
        //filtros de campaña
        if ($entidad_tipo == Actividades_Constants::ENTIDAD_TIPO_CAMPANIA) {
            //tareas programadas
            $criteria->condition.='OR ((ac.entidad_tipo = "campania_tarea_programada" and ac.entidad_id in (select ctp.id from campania_tarea_programada ctp where ctp.campania_id = :entidad_id)))';
            $entidadesCampania = Campanias_Constants::getActionsCostants();
            $i = 0;
            foreach ($entidadesCampania as $entidadCp => $entidadTa) {
                $criteria->condition.=' OR (ac.entidad_tipo = :entidad_action_' . $i . ' and (ac.entidad_id in (select ce.entidad_id from campania_entidad ce where(ce.entidad_tipo= :campania_entidad_action_' . $i . ' and ce.campania_id = :entidad_id))))';
                $arrayParams = array_merge($arrayParams, array(':entidad_action_' . $i => $entidadTa,
                    ':campania_entidad_action_' . $i => $entidadCp));
                $i++;
            }
        }
        if ($entidad_tipo == Actividades_Constants::ENTIDAD_TIPO_CONTACTO || $entidad_tipo == Actividades_Constants::ENTIDAD_TIPO_CUENTA) {
            //campo de relación con la entidada de la actividada
            $campoEntidad = $entidad_tipo == Actividades_Constants::ENTIDAD_TIPO_CONTACTO ? 'contacto_id' : 'cuenta_id';
            //actividad de oportunidades
            $criteria->condition.='OR(ac.entidad_tipo = :entidad_oportunidad AND (ac.entidad_id in (select op.id from oportunidad op where op.' . $campoEntidad . ' = :entidad_id)))';
            $arrayParams = array_merge($arrayParams, array(':entidad_oportunidad' => Actividades_Constants::ENTIDAD_TIPO_OPORTUNIDAD));
            //actividad de cobranza
            $criteria->condition.='OR(ac.entidad_tipo = :entidad_cobranza AND (ac.entidad_id in (select cz.id from cobranza cz where cz.' . $campoEntidad . ' = :entidad_id)))';
            $arrayParams = array_merge($arrayParams, array(':entidad_cobranza' => Actividades_Constants::ENTIDAD_TIPO_COBRANZA));
            //actividad de incidencia
            $criteria->condition.='OR(ac.entidad_tipo = :entidad_incidenia AND (ac.entidad_id in (select ic.id from incidencia ic where ic.' . $campoEntidad . ' = :entidad_id)))';
            $arrayParams = array_merge($arrayParams, array(':entidad_incidenia' => Actividades_Constants::ENTIDAD_TIPO_INCIDENCIA));
            //filtro para cuentas
            if ($entidad_tipo == Actividades_Constants::ENTIDAD_TIPO_CUENTA) {
                //actividade contactos
                $criteria->condition.='OR(ac.entidad_tipo = :entidad_contacto AND (ac.entidad_id in (select co.id from contacto co where co.cuenta_id = :entidad_id)))';
                $arrayParams = array_merge($arrayParams, array(':entidad_contacto' => Actividades_Constants::ENTIDAD_TIPO_CONTACTO));
                //actividad de contactos
                $criteria->condition.='OR(ac.entidad_tipo = :entidad_contacto AND (ac.entidad_id in (select co.id from contacto co where co.cuenta_id = :entidad_id)))';
                $arrayParams = array_merge($arrayParams, array(':entidad_contacto' => Actividades_Constants::ENTIDAD_TIPO_CONTACTO));
            }
            //filtro para contactos
            if ($entidad_tipo == Actividades_Constants::ENTIDAD_TIPO_CONTACTO) {
                //actividade sms
                $criteria->condition.='OR(ac.entidad_tipo = :entidad_sms AND (ac.entidad_id in (select sms.id from sms where sms.contacto_id = :entidad_id)))';
                $arrayParams = array_merge($arrayParams, array(':entidad_sms' => Actividades_Constants::ENTIDAD_TIPO_SMS));
                //actividade llamada
                $criteria->condition.='OR(ac.entidad_tipo = :entidad_llamada AND (ac.entidad_id in (select llamada.id from llamada where llamada.contacto_id = :entidad_id)))';
                $arrayParams = array_merge($arrayParams, array(':entidad_llamada' => Actividades_Constants::ENTIDAD_TIPO_LLAMADA));
                //actividade mail
                $criteria->condition.='OR(ac.entidad_tipo = :entidad_mail AND (ac.entidad_id in (select mail.id from mail where mail.contacto_id = :entidad_id)))';
                $arrayParams = array_merge($arrayParams, array(':entidad_mail' => Actividades_Constants::ENTIDAD_TIPO_MAIL));
            }
        }

        $criteria->params = $arrayParams;
        $criteria->order = 'fecha DESC';
        return $criteria;
    }

    /**
     * retorna el dataprovides de actividades
     * @author Alex Yepez <ayepez@tradesystem.com.ec>
     * @param type $entidad_tipo
     * @param type $entidad_id
     * @return \CActiveDataProvider
     */
    public function searchActivites($entidad_tipo, $entidad_id) {
        $criteria = $this->getCriteriaDP($entidad_tipo, $entidad_id);
        return new CActiveDataProvider($this, array(
            'criteria' => $criteria,
            "pagination" => array(
                "pageSize" => 10
            )
        ));
    }

}
